﻿<?xml version="1.0" encoding="utf-8"?><Articles><Article><ArticlesID>583</ArticlesID><Title>Những c&amp;#225;i mới trong C# .NET 3.0</Title><Body>&amp;lt;p&amp;gt;Một số bạn hỏi t&amp;amp;ocirc;i rằng c&amp;amp;oacute; phải C# 3.0 nằm trong .NET 3.0 Framework hay kh&amp;amp;ocirc;ng? Xin thưa l&amp;amp;agrave; kh&amp;amp;ocirc;ng? M&amp;amp;agrave; C# 3.0 được giới thiệu trong .NET 3.5.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Trong C# 3.0 c&amp;amp;oacute; một số t&amp;amp;iacute;nh năng mới đ&amp;amp;atilde; được giới thiệu, dưới đ&amp;amp;acirc;y l&amp;amp;agrave; liệt k&amp;amp;ecirc; t&amp;amp;oacute;m tắt c&amp;amp;aacute;c t&amp;amp;iacute;nh năng đ&amp;amp;oacute;:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Khai b&amp;amp;aacute;o biến kiểu kh&amp;amp;ocirc;ng tường minh (Implicitly typed local variables)&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Tạo kiểu (lớp) tạm thời (Anonymous types)&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;C&amp;amp;aacute;c phương thức mở rộng (Extension methods)&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Khởi tạo c&amp;amp;aacute;c Object v&amp;amp;agrave; Collection (Object and collection initializers)&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Biểu thức Lambda (Lambda expressions)&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Biểu thức truy vấn LINQ (Query expressions)&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Biểu thức c&amp;amp;acirc;y (Expression Trees)&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Tự động x&amp;amp;acirc;y dựng Properties (Auto-Implemented Properties)&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Nội dung dưới đ&amp;amp;acirc;y sẽ đi s&amp;amp;acirc;u chi tiết v&amp;amp;agrave;o một số c&amp;amp;aacute;c t&amp;amp;iacute;nh năng mới n&amp;amp;agrave;y.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;Implicitly Typed Local Variables&amp;lt;/span&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;C# 3.0 đưa th&amp;amp;ecirc;m 1 từ kho&amp;amp;aacute; mới gọi l&amp;amp;agrave; &amp;amp;ldquo;&amp;lt;span class=&amp;quot;style1&amp;quot;&amp;gt;var&amp;lt;/span&amp;gt;&amp;amp;ldquo;. Từ kho&amp;amp;aacute; var cho ph&amp;amp;eacute;p định nghĩa 1 biến m&amp;amp;agrave; kh&amp;amp;ocirc;ng cần khai b&amp;amp;aacute;o kiểu tường minh, như v&amp;amp;iacute; dụ dưới đ&amp;amp;acirc;y l&amp;amp;agrave; hợp lệ trong C# 3.0&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;var&amp;lt;/span&amp;gt; i = 1;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Một điểm lưu &amp;amp;yacute; khi sử dụng khai b&amp;amp;aacute;o n&amp;amp;agrave;y l&amp;amp;agrave; gi&amp;amp;aacute; trị g&amp;amp;aacute;n v&amp;amp;agrave;o phải được thực hiện ngay sau lệnh khai b&amp;amp;aacute;o. Khi thực hiện lệnh g&amp;amp;aacute;n th&amp;amp;igrave; biến đ&amp;amp;atilde; được ngầm định khai b&amp;amp;aacute;o kiểu tương ứng. Trong v&amp;amp;iacute; dụ:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span class=&amp;quot;MsoNormal&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;var&amp;lt;/span&amp;gt; i = 1; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;// Correct&amp;lt;br /&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;var&amp;lt;/span&amp;gt; i; &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;//Incorrect&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;th&amp;amp;igrave; d&amp;amp;ograve;ng lệnh thứ nhất khai b&amp;amp;aacute;o l&amp;amp;agrave; hợp lệ, v&amp;amp;agrave; i được hiểu l&amp;amp;agrave; kiểu int. Nhưng đối với d&amp;amp;ograve;ng lệnh thứ 2, th&amp;amp;igrave; kh&amp;amp;ocirc;ng được chấp nhận. Ngo&amp;amp;agrave;i ra, kiểu dữ liệu được g&amp;amp;aacute;n v&amp;amp;agrave;o cũng kh&amp;amp;ocirc;ng được l&amp;amp;agrave; kiểu null.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Nếu ai đ&amp;amp;atilde; từng sử dụng VB6 th&amp;amp;igrave; cũng lưu &amp;amp;yacute;, đ&amp;amp;acirc;y kh&amp;amp;ocirc;ng phải l&amp;amp;agrave; kiểu Object cũng kh&amp;amp;ocirc;ng phải l&amp;amp;agrave; kiểu variant.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Đối với khởi tạo c&amp;amp;aacute;c kiểu dữ liệu mảng, th&amp;amp;igrave; c&amp;amp;oacute; thể sử dụng syntax hơi kh&amp;amp;aacute;c một ch&amp;amp;uacute;t như v&amp;amp;iacute; dụ:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;var&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt; intArr = &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;new&amp;lt;/span&amp;gt;[] { 1, 2, 3, 4 };&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;// Declare an array&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;D&amp;amp;ograve;ng code tr&amp;amp;ecirc;n c&amp;amp;oacute; thể được hiểu l&amp;amp;agrave; intArr as int[];&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Ngo&amp;amp;agrave;i ra, var c&amp;amp;ograve;n d&amp;amp;ugrave;ng để khai b&amp;amp;aacute;o c&amp;amp;aacute;c biến c&amp;amp;oacute; kiểu d&amp;amp;ugrave;ng tạm (Anonymous Types) sẽ được l&amp;amp;agrave;m r&amp;amp;otilde; trong phần kế tiếp.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;Anonymous Types&amp;lt;/span&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;C# 3.0 cho ph&amp;amp;eacute;p tạo ra c&amp;amp;aacute;c class d&amp;amp;ugrave;ng tạm thời m&amp;amp;agrave; kh&amp;amp;ocirc;ng cần phải định nghĩa class đ&amp;amp;oacute; trước. V&amp;amp;iacute; dụ, m&amp;amp;igrave;nh cần 1 class tạm thời d&amp;amp;ugrave;ng để khai b&amp;amp;aacute;o 1 mẫu xe c&amp;amp;oacute; c&amp;amp;aacute;c thuộc t&amp;amp;iacute;nh l&amp;amp;agrave; năm SX (manf), m&amp;amp;agrave;u sắc (color) v&amp;amp;agrave; số chỗ ngồi (seats) th&amp;amp;igrave; dưới đ&amp;amp;acirc;y l&amp;amp;agrave; 1 v&amp;amp;iacute; dụ cho ph&amp;amp;eacute;p khai b&amp;amp;aacute;o như vậy:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;var&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt; mycar = &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;new&amp;lt;/span&amp;gt; { manf = 2007, color = System.Drawing.&amp;lt;span style=&amp;quot;color: rgb(43, 145, 175);&amp;quot;&amp;gt;Color&amp;lt;/span&amp;gt;.Black, seats = 4 };&amp;lt;br /&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;mycar.manf = 2006;&amp;lt;br /&amp;gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;mycar.color = System.Drawing.&amp;lt;span style=&amp;quot;color: rgb(43, 145, 175);&amp;quot;&amp;gt;Color&amp;lt;/span&amp;gt;.White;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Trong d&amp;amp;ograve;ng code tr&amp;amp;ecirc;n, từ kho&amp;amp;aacute; new cho ph&amp;amp;eacute;p định nghĩa ra 3 thuộc t&amp;amp;iacute;nh l&amp;amp;agrave; manf, color v&amp;amp;agrave; seats. Khi compile, C# Compiler sẽ tạo ra 1 class tương tự vậy&amp;lt;/p&amp;gt;
&amp;lt;pre class=&amp;quot;brush: csharp;&amp;quot; title=&amp;quot;code&amp;quot;&amp;gt;
class __Anonymous1 {

    private int _manf = 2007;
    private int _seats = 4;
    private System.Drawing.Color _color = System.Drawing.Color.Black;
    public string manf
    {
    get { return _manf; }
    set { _manf = value; }
    }

    public string seats
    {
    get { return _seats; }
    set { _seats = value; }
    }

    public int color
    {
    get { return _color; }
    set { _color = value; }
    }

}&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;Ngo&amp;amp;agrave;i ra, nếu như c&amp;amp;oacute; 1 khai b&amp;amp;aacute;o kh&amp;amp;aacute;c tương tự để tạo 1 instances mới cho 1 class ki&amp;amp;ecirc;ủ như vậy, th&amp;amp;igrave; C# Compiler cũng đủ th&amp;amp;ocirc;ng minh để tạo ra 1 class cho &amp;amp;gt;2 khai b&amp;amp;aacute;o như vậy, v&amp;amp;agrave; thậm ch&amp;amp;iacute;, trong code, c&amp;amp;oacute; thể g&amp;amp;aacute;n gi&amp;amp;aacute; trị cho nhau (v&amp;amp;igrave; chung 1 type)&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;Extension Methods&amp;lt;/span&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Extension Method l&amp;amp;agrave; 1 t&amp;amp;iacute;nh năng rất hay trong C# 3.0 n&amp;amp;agrave;y.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Giả sử bạn c&amp;amp;oacute; được 1 class từ đ&amp;amp;acirc;u đ&amp;amp;oacute;, tuy nhi&amp;amp;ecirc;n, bạn kh&amp;amp;ocirc;ng c&amp;amp;oacute; code m&amp;amp;agrave; chỉ c&amp;amp;oacute; file dll m&amp;amp;agrave; th&amp;amp;ocirc;i. Bạn muốn mở rộng v&amp;amp;agrave; th&amp;amp;ecirc;m 1 số h&amp;amp;agrave;m của class MyPoint chẳng hạn, th&amp;amp;igrave; th&amp;amp;ocirc;ng thường bạn sẽ l&amp;amp;agrave;m c&amp;amp;aacute;ch n&amp;amp;agrave;o? Inherit , viết Wrapper &amp;amp;hellip;?&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Với Extension methods, th&amp;amp;igrave; C# cho ph&amp;amp;eacute;p lập tr&amp;amp;igrave;nh vi&amp;amp;ecirc;n viết c&amp;amp;aacute;c method cho c&amp;amp;aacute;c lớp kh&amp;amp;aacute;c một c&amp;amp;aacute;ch kh&amp;amp;aacute; dễ d&amp;amp;agrave;ng. H&amp;amp;atilde;y xem v&amp;amp;iacute; dụ sau, class MyPoint l&amp;amp;agrave; 1 class kh&amp;amp;ocirc;ng c&amp;amp;oacute; sẵn source, v&amp;amp;agrave; m&amp;amp;igrave;nh muốn th&amp;amp;ecirc;m 1 h&amp;amp;agrave;m để t&amp;amp;iacute;nh Distance giữa 2 điểm (2 object MyPoint) l&amp;amp;agrave; từ ch&amp;amp;iacute;nh MyPoint đang x&amp;amp;eacute;t tới 1 MyPoint kh&amp;amp;aacute;c.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Rất đơn giản, khai b&amp;amp;aacute;o 1 class kh&amp;amp;aacute;c v&amp;amp;agrave; khai b&amp;amp;aacute;o th&amp;amp;ecirc;m h&amp;amp;agrave;m cần th&amp;amp;ecirc;m v&amp;amp;agrave;o, lưu &amp;amp;yacute; từ kho&amp;amp;aacute; this trong Parameter đầu ti&amp;amp;ecirc;n&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: csharp;&amp;quot;&amp;gt;
public static class MyExtend{

    public static int DistanceTo(this MyPoint mp, MyPoint another){

        //Process the method here
        return (mp.x + mp.y) &amp;amp;ndash; (another.x + another.y);

    }

}&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;V&amp;amp;agrave; trong lớp cần sử dụng&amp;amp;hellip; (trong v&amp;amp;iacute; dụ sau c&amp;amp;oacute; d&amp;amp;ugrave;ng 1 t&amp;amp;iacute;nh năng mới của C# 3.0 l&amp;amp;agrave; Object, Collection Initilizers sẽ được b&amp;amp;agrave;n sau)&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: csharp;&amp;quot;&amp;gt;
List&amp;amp;lt;MyPoint&amp;amp;gt; allPoints = new List&amp;amp;lt;MyPoint&amp;amp;gt;{

new MyPoint{x = 1, y=2},
new MyPoint{x = 3, y=4},
new MyPoint{x = 4, y=2},
new MyPoint{x = 2, y=5}
};

int result = allPoints[1].DistanceTo(allPoints[2]);&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;Từ v&amp;amp;iacute; dụ tr&amp;amp;ecirc;n, c&amp;amp;oacute; thể thấy h&amp;amp;agrave;m DistanceTo được xem như 1 h&amp;amp;agrave;m của lớp MyPoint.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Khi sử dụng t&amp;amp;iacute;nh năng n&amp;amp;agrave;y, cần lưu &amp;amp;yacute;:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;H&amp;amp;agrave;m cần th&amp;amp;ecirc;m v&amp;amp;agrave;o phải l&amp;amp;agrave; h&amp;amp;agrave;m static&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;H&amp;amp;agrave;m cần th&amp;amp;ecirc;m v&amp;amp;agrave;o phải đặt v&amp;amp;agrave;o trong 1 class static&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Kiểu dữ liệu của tham số đầu ti&amp;amp;ecirc;n sẽ tương ứng với kiểu dữ liệu cần th&amp;amp;ecirc;m v&amp;amp;agrave;o.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Từ kho&amp;amp;aacute; this phải đặt ở tham số đầu ti&amp;amp;ecirc;n&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Để sử dụng, th&amp;amp;igrave; class d&amp;amp;ugrave;ng để khai b&amp;amp;aacute;o phải visible trong context cần sử dụng (d&amp;amp;ugrave;ng using&amp;amp;hellip;)&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;Object and Collection Initializers&amp;lt;/span&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;C# 3.0 cũng cho ph&amp;amp;eacute;p khởi tạo c&amp;amp;aacute;c đối tượng v&amp;amp;agrave; khai b&amp;amp;aacute;o chỉ trong c&amp;amp;ugrave;ng 1 c&amp;amp;acirc;u lệnh, v&amp;amp;agrave; class cũng kh&amp;amp;ocirc;ng cần phải c&amp;amp;oacute; c&amp;amp;aacute;c constructor, h&amp;amp;atilde;y xem v&amp;amp;iacute; dụ khai b&amp;amp;aacute;o Class MyPoint dưới đ&amp;amp;acirc;y:&amp;lt;/p&amp;gt;
&amp;lt;pre class=&amp;quot;brush: csharp;&amp;quot; title=&amp;quot;code&amp;quot;&amp;gt;
public class MyPoint{

    int _x = 0;
    public int x {

        get { return _x; }
        set { _x = value; }

    }

    int _y = 0;
    public int y{

        get { return _y; }
        set { _y = value; }

    } 

}&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;Lưu &amp;amp;yacute; l&amp;amp;agrave; ở đ&amp;amp;acirc;y, Minh kh&amp;amp;ocirc;ng khai b&amp;amp;aacute;o bất kỳ Constructor n&amp;amp;agrave;o. H&amp;amp;atilde;y xem v&amp;amp;iacute; dụ ở tr&amp;amp;ecirc;n về Extension Method, C# 3.0 cho ph&amp;amp;eacute;p viết khởi tạo c&amp;amp;aacute;c class như đ&amp;amp;atilde; được n&amp;amp;ecirc;u ở b&amp;amp;ecirc;n tr&amp;amp;ecirc;n&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Đơn giản hơn:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;MyPoint&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt; p = &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;new&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: rgb(43, 145, 175);&amp;quot;&amp;gt;MyPoint&amp;lt;/span&amp;gt;() { x = 1, y = 4 };&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Cũng đ&amp;amp;atilde; c&amp;amp;oacute; c&amp;amp;acirc;u hỏi rằng tại sao kh&amp;amp;ocirc;ng gọi vậy cho lẹ:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;MyPoint&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt; p = &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;new&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color: rgb(43, 145, 175);&amp;quot;&amp;gt;MyPoint&amp;lt;/span&amp;gt;(1,4);&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Do ở đ&amp;amp;acirc;y kh&amp;amp;ocirc;ng sử dụng Constructor, n&amp;amp;ecirc;n c&amp;amp;aacute;ch gọi n&amp;amp;agrave;y l&amp;amp;agrave; gọi 1 constructor với 2 tham số 1 v&amp;amp;agrave; 2&amp;amp;hellip;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;span style=&amp;quot;font-size: medium;&amp;quot;&amp;gt;Auto-Implemented Properties&amp;lt;/span&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Trong l&amp;amp;uacute;c lập tr&amp;amp;igrave;nh, việc khai b&amp;amp;aacute;o c&amp;amp;aacute;c Properties cho 1 class l&amp;amp;agrave; chuyện l&amp;amp;agrave;m rất thường xuy&amp;amp;ecirc;n, như v&amp;amp;iacute; dụ ở tr&amp;amp;ecirc;n, class MyPoint được khai b&amp;amp;aacute;o c&amp;amp;aacute;c properties như sau&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: csharp;&amp;quot;&amp;gt;
public class MyPoint{

    int _x = 0;
    public int x {

        get { return _x; }
        set { _x = value; }

    }

    int _y = 0;
    public int y{

        get { return _y; }
        set { _y = value; }

    } 

}&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;Đa số c&amp;amp;aacute;c Properties đều thực hiện c&amp;amp;aacute;c thao t&amp;amp;aacute;c như l&amp;amp;agrave; ghi v&amp;amp;agrave; đọc từ 1 biến private n&amp;amp;agrave;o đ&amp;amp;oacute;. Trong C# 3.0, nếu như properties của bạn chỉ thực hiện c&amp;amp;aacute;c thao t&amp;amp;aacute;c như ở tr&amp;amp;ecirc;n (đọc v&amp;amp;agrave; ghi v&amp;amp;agrave;o biến private) th&amp;amp;igrave; kh&amp;amp;ocirc;ng cần phải khai b&amp;amp;aacute;o như vậy, m&amp;amp;agrave; thay v&amp;amp;agrave;o đ&amp;amp;oacute; chỉ cần khai b&amp;amp;aacute;o:&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: csharp;&amp;quot;&amp;gt;
public class MyPoint{
    public int x {get ; set;}
    public int y {get ; set; }
}&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;Khi bi&amp;amp;ecirc;n dịch, th&amp;amp;igrave; C# Compiler sẽ tự động tạo ra c&amp;amp;aacute;c biến private tương tự y như khai b&amp;amp;aacute;o tường minh ở khai b&amp;amp;aacute;o tr&amp;amp;ecirc;n. Kết quả l&amp;amp;agrave; 2 khai b&amp;amp;aacute;o ho&amp;amp;agrave;n to&amp;amp;agrave;n tương tự nhau.&amp;lt;/p&amp;gt;</Body><CommentEnabled>True</CommentEnabled><ViewCount>0</ViewCount><ReleaseDate>11/3/2009 10:43:54 PM</ReleaseDate><TotalComment>0</TotalComment><IsMedia>False</IsMedia><IsPicture>False</IsPicture><IsVote>True</IsVote><ArticlePassword /><PostVisible>0</PostVisible><ArticlePath>/2009/11/3/Nhung-cai-moi-trong-C--NET-3-0-247</ArticlePath><Approved>True</Approved><ImagePath /><CategoryId>28</CategoryId><ArrayCatID>28|25</ArrayCatID></Article></Articles>